﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once
#include "IPositionGeometry.h"

namespace gcmp
{
    class IDocument;
    class IElement;
    /// \brief 点相对于另一个宿主点式定位的定位类
    ///
    /// 例如板洞在板上
    class GCMP_MODEL_INTERFACE_EXPORT IPositionPointRelativeHostPoint2d : public IPositionGeometry
    {
        DEFINE_CAST_DERIVED(gcmp::IPositionPointRelativeHostPoint2d, gcmp::IPositionGeometry)
    public:
        /// \brief 创建点相对于另一个宿主点定位对象
        /// \param pElement 元素指针
        /// \param origin 原点
        /// \param directionX X方向 
        /// \param directionY Y方向 
        /// \return 点相对于另一个宿主点定位对象
        static OwnerPtr<IPositionPointRelativeHostPoint2d> Create(IElement *pElement, const Vector3d &origin, const Vector3d &directionX, const Vector3d &directionY);

    public:
        /// \brief 得到定位原点
        /// \return 定位原点
        virtual Vector3d GetOrigin() const = 0;

        /// \brief 设置定位原点
        /// \param origin 定位
        /// \return 返回true表示成功设置，否则表示失败 
        virtual bool SetOrigin(const Vector3d& origin) = 0;

        /// \brief 得到世界坐标系下的定位原点
        /// \return 世界坐标系下的定位原点
        virtual Vector3d GetWorldOrigin() const = 0;

        /// \brief 得到定位坐标系X轴方向
        /// \return 定位坐标系X轴方向
        virtual Vector3d GetDirectionX() const = 0;

        /// \brief 设置定位坐标系X轴方向
        /// \param direction 方向
        /// \return 返回true表示成功设置，否则表示失败
        virtual bool SetDirectionX(const Vector3d& direction) = 0;

        /// \brief 得到定位坐标系Y轴方向
        /// \return 定位坐标系Y轴方向
        virtual Vector3d GetDirectionY() const = 0;

        /// \brief 设置定位坐标系Y轴方向
        /// \param direction 方向
        /// \return 返回true表示成功设置，否则表示失败
        virtual bool SetDirectionY(const Vector3d& direction) = 0;

    };
}


